﻿/*
  File: CResourceManager.h
 
  Leírás:	A megjelenítendő objektumok, mint erőforrások tulajdonosa. 
  Ő felelős a nyílvántartásukért, felszabadításukért és az objektum vektorok kezelésért.
  Egyfajta objektum gyártóként működik.

  Szerző: SevN.


*/


#ifndef __CRESOURCEMANAGER_H__
#define __CRESOURCEMANAGER_H__

#include "..\Includes\IPrimitive.h"
#include "..\Includes\ICamera.h"

#include "CRectangle.h"
#include "CAnimatedMesh.h"

#include "CSphere.h"
#include "CCamera.h"

#include "..\Engine\CRenderer.h"

#include <vector>
#include <algorithm>

#include "..\GUI\CGUIObject.h"
#include "..\GUI\CWindow.h"
#include "..\GUI\CText.h"

namespace Content
{
class CResourceManager
{
public:
  // egyke megsemmisítése
  static void destroy();

  static CResourceManager* getInstance();

  // primitive felvétele a megjelenítendő objektumok közé
  void addPrimitive(CPrimitive* pPrim);

  // primitive törlése a megjelenítendő objektumok közül
  void deletePrimitive(CPrimitive* pPrim);

  // basemesh felvétele a megjelenítendő objektumok közé
  void addMesh(CAnimatedMesh* pMesh);

  // ablak felvétele a megjelenítendő objektumok közé
  void addGUIObject(GUI::CGUIObject* pWindow);

  // primitivek listájának lekérése
  std::vector<CPrimitive*>* getPrimitives();

  // basemeshek listájának lekérése
  std::vector<CAnimatedMesh*>* getMeshes();

  // ablakok listájának lekérése
  std::vector<GUI::CGUIObject*>* getGUIObjects();

  // felszabaditás
  void clean();

private:
  ~CResourceManager();

  static CResourceManager* pInstance;

  // primitivek
  std::vector<CPrimitive*> primitives;

  // basemeshek
  std::vector<CAnimatedMesh*> meshes;

  // ablakok
  std::vector<GUI::CGUIObject*> GUIObjects;

};

}




#endif